#pragma once

#include "global_config.h"
#include "drv_key.h"
#include "drv_ble.h"

#define DATA_VERSION 2 // 设置比存储大1则保留原数据字节长度更新，一致则不更新，其余则清空数据

typedef enum
{
    WAKE_BY_POWER_ON,
    WAKE_BY_BTN,
    WAKE_BY_USB,
    WAKE_BY_RTC,
    WAKE_BY_SF32,
    WAKE_BY_DEBUG,
    WAKE_BY_SF_PROG,
} wake_rason_t;

typedef struct
{
    uint8_t version;          // 版本号
    uint8_t size;             // 数据大小
    key_ee_datas_t key_datas; // 钥匙数据
    ble_ee_datas_t ble_datas; // 蓝牙数据
} eeprom_datas_t;

typedef struct
{
    eeprom_datas_t eeprom_datas; // EEPROM数据

    wake_rason_t wake_rason; // 唤醒原因
    en_state_t sleep_state;  // 系统休眠状态,休眠中(1 ENABLE),工作中(0 DISABLE)
    en_state_t debug_state;  // 调试状态,调试中(1 ENABLE),工作中(0 DISABLE)
    dev_state_t usb_sta;     // USB连接状态,未连接(0 OFFLINE),已连接(1 ONLINE)
    key_cu_datas_t key;      // 钥匙实时数据

    // ble_cu_datas_t ble_cu_datas; // 蓝牙实时动态数据
    // en_state_t key_power_state; // o

    // uint8_t ble_near_trig_flag[BLE_SNV_NUM]; // 蓝牙已触发解锁标志

    // uint8_t sf32_state : 1; // offline(0):休眠中,online(1)工作中
    // uint8_t usb_state : 1;  // offline(0):未连接,online(1)已连接
    // uint8_t dev_scaned : 1; // offline(0):未扫描到目标 ,online(1)已扫描到目标

    uint8_t bat_soc : 7; // 0~100
    uint16_t bat_volt;   // mV
    int8_t temp;         // 温度
} public_datas_t;

extern const char *string_en_status[];
extern const char *string_trig_level[];

/**
 * @brief 获取公共数据
 *
 * @return public_datas_t*
 */
public_datas_t *public_datas();

/**
 * @brief 公共数据初始化
 *
 */
void public_datas_init();
